<script setup lang="ts">
import { ContentWrap } from '@/components/ContentWrap'
import { Search } from '@/components/Search'
// import { useI18n } from '@/hooks/web/useI18n'
import { ElButton, ElMessageBox } from 'element-plus'
import { Table } from '@/components/Table'
// import { zcPastureListAdminApi, zcPastureListApi } from '@/api/fa/pasture'
import { zcPastureListAdminApi } from '@/api/fa/pasture'
import { useTable } from '@/hooks/web/useTableTest'
import { ref, reactive, toRaw } from 'vue'
import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
// import { useRouter } from 'vue-router'
// const { push } = useRouter()

// import { useCache } from '@/hooks/web/useCache'
import { sysDictRelsApi } from '@/api/dict'
import { dbMonthReportListApi, dbMonthReportListExcelApi } from '@/api/forms'
import { t } from 'vxe-table'

import See from './components/See.vue'

// const { wsCache } = useCache()
// const dict: any = wsCache.get('dict')
// 字典通过value获取label
// const getDictLabel = (type, value) => {
//   let data = dict[type].find((item) => {
//     return item.value == value
//   })
//   return data ? data.label : ''
// }

const dictRelsData = ref() // 联动数据

// const breedSubData: any = ref([]) // 品种的枚举

const searchRef = ref() // 搜索的标签

// 获取联动关系
const getDictRels = async () => {
  const res = await sysDictRelsApi({
    p_type: 'breed',
    c_type: 'breed_sub'
  })
    .catch(() => {})
    .finally(() => {})
  if (res) {
    dictRelsData.value = res.data
  }
}

const { register, tableObject, methods } = useTable<
  {
    total: number
    list: any[]
  },
  any
>({
  getListApi: dbMonthReportListApi,
  response: {
    data: 'data',
    count: 'count'
  }
})

const { getList, setSearchParams } = methods

// getList()

// 选择畜别的时候触发，处理品种类容
// const breedChange = (value) => {
//   breedGetSub(value)
//   const new_search = unref(searchRef)
//   new_search.setData({ ...new_search.getData(), breed_sub: '' })
// }

// 根据畜别查询品种
// const breedGetSub = async (breed_value) => {
//   // console.log('breed_value', breed_value, !breed_value)
//   if (!breed_value) {
//     breedSubData.value = []
//   } else {
//     let breedData = dictRelsData.value.find((item) => {
//       return item.value == breed_value
//     })
//     breedSubData.value = breedData.children
//   }
// }

// const { t } = useI18n()
// const crudSchemas = reactive<CrudSchema[]>([
//   // {
//   //   field: 'index',
//   //   type: 'index',
//   //   label: '主键',
//   //   fixed: 'left',
//   //   width: 60
//   // },
//   {
//     field: 'pasture_org_id',
//     label: '牧场名称',
//     table: {
//       show: false
//     },
//     search: {
//       component: 'DialogRefer',
//       componentProps: {
//         getListApi: zcPastureListAdminApi,
//         response: {
//           count: 'count',
//           data: 'data'
//         },
//         title: '选择组织（双击选择）',
//         nameField: 'org_name',
//         relNameField: 'org_name',
//         valueField: 'org_id',
//         relValueField: 'org_id',
//         crudSchemas: [
//           {
//             field: 'org_name',
//             label: '组织名称',
//             fixed: 'left',
//             search: {
//               show: true
//             }
//           }
//         ]
//       },
//       show: true
//     }
//   },
//   {
//     text: 'center',
//     label: '我的资产',
//     children: [
//       {
//         field: 'pasture_org_name',
//         label: '牧场名称',
//         width: 180
//       },
//       {
//         field: 'breed',
//         label: '畜别',
//         width: 80,
//         formatter: (_: Recordable, __: TableColumn, cellValue: number | string) => {
//           return getDictLabel('breed', cellValue)
//         },
//         search: {
//           component: 'Select',
//           componentProps: {
//             options: dict.breed,
//             onChange: breedChange
//           },
//           show: true
//         }
//       },
//       {
//         field: 'breed_sub',
//         label: '品种',
//         width: 120,
//         formatter: (_: Recordable, __: TableColumn, cellValue: number | string) => {
//           return getDictLabel('breed_sub', cellValue)
//         },
//         search: {
//           component: 'Select',
//           componentProps: {
//             options: breedSubData
//           },
//           show: true
//         }
//       },
//       {
//         field: 'sex',
//         label: '育肥牛存栏数',
//         width: 120
//       },
//       {
//         field: 'start_day',
//         label: '育肥牛入栏数',
//         width: 120
//       },
//       {
//         field: 'end_day',
//         label: '育肥牛出栏数',
//         width: 120
//       }
//     ]
//   },
//   {
//     field: 'pasture_org_id',
//     label: '牧场名称',
//     form: {
//       component: 'DialogRefer',
//       componentProps: {
//         getListApi: zcPastureListApi,
//         response: {
//           count: 'count',
//           data: 'data'
//         },
//         relNameField: 'org_name',
//         title: '选择标签组（双击选择）',
//         nameField: 'pasture_org_name',
//         valueField: 'pasture_org_id',
//         crudSchemas: [
//           {
//             field: 'org_name',
//             label: '牧场名称',
//             fixed: 'left',
//             search: {
//               show: true
//             }
//           }
//         ]
//       },
//       show: true
//     },
//     table: {
//       show: false
//     },
//     detail: {
//       show: false
//     }
//   },
//   {
//     text: 'center',
//     label: '饲养效率',
//     children: [
//       {
//         field: 'pasture_org_name',
//         label: '育肥牛增重',
//         children: [
//           { field: '平均', label: '平均增重', width: 100 },
//           { field: '平均', label: '总增重', width: 80 }
//         ]
//       },
//       {
//         field: 'pasture_org_name',
//         label: '育肥牛增值',
//         children: [
//           { field: '平均', label: '平均增值', width: 100 },
//           { field: '平均', label: '总增值', width: 80 }
//         ]
//       },
//       {
//         field: 'pasture_org_name',
//         label: '低效牛数据',
//         children: [
//           { field: '平均', label: '低效牛总数', width: 100 },
//           { field: '平均', label: '恢复增长低效牛数量', width: 100 },
//           { field: '平均', label: '出栏处理低效牛数量', width: 100 },
//           { field: '平均', label: '低效育肥牛分栏后增重效率', width: 120 }
//         ]
//       }
//     ]
//   },
//   {
//     // field: '育肥牛健康状况',
//     label: '育肥牛健康状况',
//     children: [
//       { field: '生病', label: '生病数量', width: 100 },
//       { field: '生病', label: '生病百分比', width: 100 }
//     ]
//   },
//   {
//     // field: '育肥牛健康状况',
//     field: 'content',
//     test: 'center',
//     label: '饲料储备和消耗',
//     children: [
//       { field: '饲料', label: '储备数量', width: 100 },
//       { field: '饲料', label: '储备金额', width: 100 },
//       { field: '饲料', label: '入库数量', width: 100 },
//       { field: '饲料', label: '入库金额', width: 100 },
//       { field: '饲料', label: '出库数量', width: 100 },
//       { field: '饲料', label: '出库金额', width: 100 }
//     ]
//   },
//   {
//     // field: '育肥牛健康状况',
//     field: 'content',
//     label: '利润',
//     children: [
//       { field: '利润', label: '实现利润', width: 100 },
//       { field: '利润', label: '预期利润', width: 100 }
//     ]
//   },
//   {
//     // field: '育肥牛健康状况',
//     test: 'center',
//     label: '统计周期',
//     children: [
//       { field: '周期', label: '起始时间', width: 100 },
//       { field: '周期', label: '截止时间', width: 100 }
//     ]
//   },
//   {
//     // field: '育肥牛健康状况',
//     test: 'center',
//     label: '统计周期',
//     children: [{ field: '周期', label: '年月', width: 100 }]
//   }
//   // {
//   //   field: 'create_time',
//   //   label: '创建时间',
//   //   width: 170,
//   //   form: {
//   //     show: false
//   //   },
//   //   search: {
//   //     show: true,
//   //     component: 'DatePicker',
//   //     componentProps: {
//   //       'is-range': true,
//   //       'unlink-panels': true,
//   //       rangeSeparator: 'To',
//   //       type: 'daterange',
//   //       valueFormat: 'YYYY-MM-DD HH:mm:ss'
//   //     }
//   //   }
//   // },
//   // {
//   //   field: 'action',
//   //   width: 90,
//   //   fixed: 'right',
//   //   label: t('tableDemo.action'),
//   //   form: {
//   //     show: false
//   //   },
//   //   detail: {
//   //     show: false
//   //   }
//   // }
// ])
const crudSchemas = reactive<CrudSchema[]>([
  // {
  //   field: 'index',
  //   type: 'index',
  //   label: '主键',
  //   fixed: 'left',
  //   width: 60
  // },
  {
    field: 'owner_org_id',
    label: '牧场名称',
    table: {
      show: false
    },
    search: {
      component: 'DialogRefer',
      componentProps: {
        getListApi: zcPastureListAdminApi,
        response: {
          count: 'count',
          data: 'data'
        },
        title: '选择组织（双击选择）',
        nameField: 'org_name',
        relNameField: 'org_name',
        valueField: 'org_id',
        relValueField: 'org_id',
        crudSchemas: [
          {
            field: 'org_name',
            label: '组织名称',
            fixed: 'left',
            search: {
              show: true
            }
          }
        ]
      },
      show: true
    }
  },
  {
    field: 'owner_pasture_name',
    label: '所属牧场'
  },
  // {
  //   field: 'breed',
  //   label: '畜别',
  //   width: 80,
  //   formatter: (_: Recordable, __: TableColumn, cellValue: number | string) => {
  //     return getDictLabel('breed', cellValue)
  //   },
  //   search: {
  //     component: 'Select',
  //     componentProps: {
  //       options: dict.breed,
  //       onChange: breedChange
  //     },
  //     show: true
  //   }
  // },
  // {
  //   field: 'breed_sub',
  //   label: '品种',
  //   width: 120,
  //   formatter: (_: Recordable, __: TableColumn, cellValue: number | string) => {
  //     return getDictLabel('breed_sub', cellValue)
  //   },
  //   search: {
  //     component: 'Select',
  //     componentProps: {
  //       options: breedSubData
  //     },
  //     show: true
  //   }
  // },
  // {
  //   field: 'date',
  //   label: '月份',
  //   width: 180
  // },
  {
    field: 'date',
    label: '月份',
    form: {
      show: false
    },
    search: {
      show: true,
      component: 'DatePicker',
      componentProps: {
        'is-range': true,
        'unlink-panels': true,
        rangeSeparator: 'To',
        type: 'daterange',
        valueFormat: 'YYYY-MM-DD HH:mm:ss'
      }
    }
  },
  {
    field: 'action',
    width: 90,
    fixed: 'right',
    label: t('tableDemo.action'),
    form: {
      show: false
    },
    detail: {
      show: false
    }
  }
])
const { allSchemas } = useCrudSchemas(crudSchemas)

const dialogVisible = ref(false)

const dialogTitle = ref('')

const actionType = ref('')

const action = async (type: string, row: any = {}) => {
  actionType.value = type
  switch (type) {
    case 'see':
      dialogTitle.value = '查看'
      tableObject.currentRow = row
      dialogVisible.value = true
      // push({
      //   path: '/reportForms/orgForm',
      //   query: {
      //     org_id: row.org_id
      //   }
      // })
      break
    default:
      console.log('未知类型')
  }
}
const loading = ref(false)
const save = async () => {
  // const edit = unref(editRef)
  // switch (actionType.value) {
  //   case 'edit':
  //     await edit?.elFormRef?.validate(async (isValid) => {
  //       if (isValid) {
  //       }
  //     })
  //     console.log(await edit.getFormData(), '111')
  //     break
  //   case 'add':
  //     await edit?.elFormRef?.validate(async (isValid) => {
  //       if (isValid) {
  //       }
  //     })
  //     break
  //   default:
  //     console.log('未知类型')
  // }
}

// 月报导出
const exportClick = async () => {
  // dialogTableVisible.value = true
  let aaa: any = tableObject.paramsObj.params
  console.log(aaa, tableObject.count)
  const paramsObj = toRaw(tableObject.paramsObj.params)
  console.log(paramsObj)

  if (paramsObj == undefined || paramsObj.owner_org_id == '') {
    ElMessageBox.alert('请选择牧场', '提示', {
      // if you want to disable its autofocus
      // autofocus: false,
      confirmButtonText: 'OK'
    })
  } else {
    let res = await dbMonthReportListExcelApi({
      owner_org_id: paramsObj.owner_org_id,
      date: paramsObj.date
    })
    // let res: any = await dbMedicalDrugDetailedListApi({
    //   ...tableObject.paramsObj.params
    // })
    //   .catch(() => {})
    //   .finally(() => {})
    if (res) {
      // FormsNumber.value = Math.ceil(res.count / 10000)
      console.log(res, 'ooo')
      window.open(res.data.url)
    }
  }
}
const init = async () => {
  await getDictRels()
  await getList()
  // tableObject.tableList = []
  // tableObject.count = 0
}
init()
</script>

<template>
  <ContentWrap>
    <Search
      ref="searchRef"
      :schema="allSchemas.searchSchema"
      @search="setSearchParams"
      @reset="setSearchParams"
    />
    <div class="mb-10px w-[100%] flex justify-end">
      <ElButton type="primary" @click="exportClick()"> 导出EXCEL </ElButton>
    </div>
    <Table
      v-model:pageSize="tableObject.pageSize"
      v-model:currentPage="tableObject.currentPage"
      :columns="allSchemas.tableColumns"
      :data="tableObject.tableList"
      :loading="tableObject.loading"
      :border="true"
      :pagination="{
        total: tableObject.count
      }"
      :selection="false"
      @register="register"
    >
      <template #action="{ row }">
        <ElButton type="primary" @click="action('see', row)">查看</ElButton>
      </template>
    </Table>
  </ContentWrap>

  <Dialog v-model="dialogVisible" :title="dialogTitle">
    <See v-if="actionType == 'see'" :id="tableObject.currentRow.id" />

    <template #footer>
      <ElButton
        v-if="actionType !== 'see' && actionType !== 'add'"
        type="primary"
        :loading="loading"
        @click="save()"
      >
        {{ t('exampleDemo.save') }}
      </ElButton>
      <ElButton v-if="actionType == 'add'" type="primary" :loading="loading" @click="save()">
        {{ t('exampleDemo.save') }}
      </ElButton>
      <ElButton @click="dialogVisible = false">关闭</ElButton>
    </template>
  </Dialog>
</template>
